#ifndef RGBImage_HPP
#define RGBImage_HPP

//------------------------------------------------------------------------------
// Fichier d'entête utilisés
//------------------------------------------------------------------------------
#include "Image.hpp"
#include "GrayImage.hpp"

namespace ImageAnalysis
{
//----------------------------------------------------------------------
// Cette classe correspond à des image de couleurs codées
// en RGB. Le stockage en mémoire est une suite de valeur
// RGB pour chaque pixel.
//----------------------------------------------------------------------
class RGBImage : public Image
{
public:
        //----------------------------------------------------------------------
        // Structure
        //----------------------------------------------------------------------
        static unsigned char Red[];
        static unsigned char Green[];
        static unsigned char Blue[];
        static unsigned char Orange[];
        static unsigned char Yellow[];

        //----------------------------------------------------------------------
        // Constructeur
        //----------------------------------------------------------------------
        RGBImage( int width, int height );

        //----------------------------------------------------------------------
        // Destructeur
        //----------------------------------------------------------------------
        virtual ~RGBImage();

        //----------------------------------------------------------------------
        // Permet de récupérer les valeurs RGB d'un pixel
		//Contrat : l'index doit correspondre à un pixel
        //----------------------------------------------------------------------
        virtual unsigned char* GetPixel( int index );

        //----------------------------------------------------------------------
        // Permet de fixer la valeur d'un pixel à partir d'un triplet
		// RGB.
		//Contrat : les valeurs RGB doivent être comprises entre 0 et 255
		// et l'index doit correspoondre à un pixel.
        //----------------------------------------------------------------------
        virtual void SetPixel( int index, unsigned char* value );

        //----------------------------------------------------------------------
        // Permet de dessiner l'image
        //----------------------------------------------------------------------
        virtual void Draw();

private:
        //----------------------------------------------------------------------
        // Constructeur par copie et oprérateur d'affectation en privée pour
        // interdire leur utilisation
        //----------------------------------------------------------------------
        RGBImage( const RGBImage& copy);
        RGBImage& operator=( const RGBImage& copy );
};

}
#endif //RGBImage_HPP
